<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
        <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
        <title>Document</title>
        <script>
            /* 
                indexOf()
                    格式：数组.index(item, start);
                    参数： item 任意的数据  start 下标 可以不传入，默认是0
                    功能：在数组中查找第一次出现item元素下标，从start开始去查找
                    返回值： -1 没有查找到    >=0 查找到的元素的下标。
             */

             /* var arr = [10, 20, 30, 40, 50, 20, 30];
             var index = arr.indexOf(120, 2);
             alert(index); */


             /* 
                数组遍历
                    for循环
                    for...in
                    forEach (ECMA5新增)

                小彩蛋：forEach 屏蔽了初学者对于循环的理解。
              */
              /* var arr = [10, 20, 30, 40, 50];
              for(var i = 0; i < arr.length; i++){
                  document.write(arr[i] + ", " + i + "<br/>");
              } */

            //   arr.forEach(function(item, index, arr){
            //     /* 
            //         item当前遍历到的元素
            //         index当前遍历到元素的下标
            //         arr数组本身
            //      */
            //      document.write(item + ", " + index + ", " + arr + "<br/>");
            //   });


            /* 
                map  映射
             */

             /* var arr = [10, 20, 30, 40, 50];
             var newArr = arr.map(function(item, index, arr){
                 //遍历要做的事情  映射关系
                return item * 1.3;
             });
             alert(newArr);
             alert(arr); */


             /* 
                filter() 过滤
              */
                /* var arr = [10, 20, 30, 40, 50];
                var newArr = arr.filter(function(item, index, arr){
                    //过滤的条件
                    return item > 20;
                });
                alert(newArr);
                alert(arr); */

            /* 
                some  某些
                【注】在数组中查找是否有符合条件的元素，有返回true，没有返回false。
                    短路操作：只要找到符合条件的元素，后面的循环就停止了。
             */
                /* var arr = [10, 20, 30, 40, 50];
                var res = arr.some(function(item, index, arr){
                    alert(item);
                    //过滤的条件
                    return item > 20;
                });
                alert(res);
                alert(arr); */

                /* 
                    every 每一个
                    【注】在数组中查找每一个元素是否有符合条件，符合返回true，不符合返回false。
                     短路操作：只要找到不符合条件的元素，后面的循环就停止了。
                 */
                
                /* var arr = [10, 20, 30, 40, 50];
                var res = arr.every(function(item, index, arr){
                    alert(item);
                    //过滤的条件
                    return item < 100;
                });
                alert(res);
                alert(arr); */



                /* 
                    reduce  归并
                 */
                var arr = [10, 20, 30, 40, 50];
                var res = arr.reduce(function(prev, next, index, arr){
                    /* 
                        prev 第一次是 下标为0的元素
                             第二次开始 上一次遍历return的值

                        next 从下标1开始，当前遍历到的元素
                        arr数组本身
                     */
                    alert(prev + ", " + next);
                    return prev + next;
                });
                alert(res);
        </script>
    </head>
    <body>
        
    </body>
</html>